package br.com.vemtransporte.fachada;

import java.util.ArrayList;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import br.com.vemtransporte.basicas.Horario;
import br.com.vemtransporte.basicas.Linha;
import br.com.vemtransporte.basicas.Parada;
import br.com.vemtransporte.basicas.Usuario;
import br.com.vemtransporte.basicas.Veiculo;
import br.com.vemtransporte.negocio.Controlador;

public class Fachada {

	Controlador controlador = new Controlador();
	private static Lock lock = new ReentrantLock();
	private Linha linhaAtual = null;


	private static Fachada instance = null;

	public static Fachada getInstance() {
		if (instance == null) {
			try {
				if (lock.tryLock()) {
					instance = new Fachada();
				}
			} finally {
				lock.unlock();
			}
		}
		return instance;
	}

	public int cadastrarUsuario(Usuario usuario) throws Exception {
		return controlador.cadastrarUsuario(usuario);
	}

	public Usuario logar(String usuario, String senha) throws Exception {
		return controlador.logar(usuario, senha);
	}

	public Usuario getUsuarioLogado() {
		return controlador.getUsuarioLogado();
	}

	public boolean CadastrarLinhaUsuario(Usuario u, Linha l) throws Exception {
		return controlador.CadastrarLinhaUsuario(u, l);
	}

	public boolean RemoverLinhaUsuario(Usuario u, Linha l) throws Exception {
		return controlador.RemoverLinhaUsuario(u, l);
	}

	public ArrayList<Linha> ProcurarLinhaTodos() throws Exception {
		return controlador.ProcurarLinhaTodos();
	}

	public ArrayList<Parada> procurarParadasPorLinha(int idLinha)
			throws Exception {
		return controlador.procurarParadasPorLinha(idLinha);
	}

	public ArrayList<Horario> ProcurarHorarioPorIdLinhaTodos(int idLinha)
			throws Exception {
		return controlador.ProcurarHorarioPorIdLinhaTodos(idLinha);
	}

	public ArrayList<Linha> ProcurarLinhaHorarioTodos() throws Exception {
		return controlador.ProcurarLinhaHorarioTodos();
	}

	public void salvar(Usuario u) throws Exception {
		controlador.salvar(u);
	}

	public Veiculo procurarTransporteUsuarioMobile(int idLinha)
			throws Exception {
		return controlador.procurarTransporteUsuarioMobile(idLinha);
	}

	public void setLinhaAtual(Linha linhaAtual) {
		this.linhaAtual = linhaAtual;
	}

	public Linha getLinhaAtual() {
		return linhaAtual;
	}

}
